const { transformFromAstSync } = require('@babel/core');
const  parser = require('@babel/parser');
const manglePlugin = require('./plugin/mangle');




/**
 * 找出所有的声明
 * 遍历所有会生成作用域的节点，包括：FunctionDeclaration、BlockStatement 
 * 对每一个声明都重命名一个毫无意义的名字
 * 更新所有使用这个声明的地方
 * 这个逻辑在 path.scope.rename 已经实现了，直接调用这个 api 即可。
 */

const sourceCode = `
    function func() {
        const num1 = 1;
        const num2 = 2;
        function add (aaa, bbb) {
            return aaa + bbb;
        }
        const num3 = add(num1, num2);
        return num3;        
    }
    func();
`;

const ast = parser.parse(sourceCode, {
    sourceType: 'unambiguous',
    comments: true
});

console.log('ast ---> ', JSON.stringify(ast))

const { code } = transformFromAstSync(ast, sourceCode, {
    plugins: [
        [manglePlugin]
    ],
    generatorOpts: {
        comments: false,
        compact: false // 压缩
    }
});

console.log('=====================================================')

console.log(code);
